# -*- coding: utf-8 -*-
"""
本代码可以实现指定地点周边的商铺查询，利用百度API，需要先注册成为百度地图开发者获取ak序列号

@author: 琪仁 uibe_chenqiren 


"""

import requests,json,xlrd
import xlwt
import pandas as pd
from urllib.parse import quote

def get_ip(loc):#返回给定位置的经纬度数据
    ip_url='http://api.map.baidu.com/geocoder/v2/?address='+quote(loc)+'&output=json&ak='+ak
    ip=requests.get(ip_url)
    callback=json.loads(ip.text)
    lng=callback['result']['location']['lng']
    lat=callback['result']['location']['lat']
    return str(lat)+','+str(lng)

def near_info(loc,keyword='KTV',radius='1000'):#（返回给定经纬度位置，附件radius距离的keyword个数，默认为附件1000米的KTV数量）
    try:
        url='http://api.map.baidu.com/place/v2/search?query='+quote(keyword)+'&location='+quote(loc)+'&radius='+quote(radius)+'+&output=json&page_size=20&ak='+ak
        res=requests.get(url)
        t=json.loads(res.text)
        num=t['total']#num即为json格式中的商铺数量
    except:
        num='NA'#如果没有该位置（位置出错），则返回NA，以备后续处理
    return num



if __name__=='__main__':
#开始这一段是输入地址位置的，使用者可以酌情更改，最终导入地址address就可以，后续是对address的循环
    path=r'C:\Users\琪仁\Desktop\上市公司注册地.xlsx'#文件输入路径，用到了xlrd
    workbook = xlrd.open_workbook(path)
    sheet1 = workbook.sheet_by_index(0)
    nrows = sheet1.nrows
    stkcd = sheet1.col_values(0,1)
    stcname = sheet1.col_values(1,1)
    address= sheet1.col_values(2, 1)
    start=0  #确定循环的起始和结束位置，方便控制程序进度
    end=3536 #可自行调节
#注册百度地图的开发者，获取ak序列

    ak=input('输入您的百度ak')
    
    num_3000,num_5000,num_10000=[],[],[]
    for add in address[start:end]:
        idx=address.index(add)
        print('正在分析第{0}家公司'.format(idx))
        try:
            loc=get_ip(add.split(',')[0])
        except:
            loc=get_ip(address0[idx].split(',')[0])
        num_3000.append(near_info(loc,'KTV','3000'))
        num_5000.append(near_info(loc,'KTV','5000'))
        num_10000.append(near_info(loc,'KTV','10000'))
        
   
    df=pd.DataFrame({'stkcd':stkcd[0:end],
                     'stkname':stcname[0:end],
                     'address':address[0:end],
                     'ktv_3000':num_3000,
                     'ktv_5000':num_5000,
                     'ktv_10000':num_10000})
        
#输出到excel，可更改路径
    df.to_excel('C:\\Users\\琪仁\\Desktop\\KTV数目\\'+str(start)+'-'+str(end)+'ktv.xls')
